home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 February: Tool Chest / Apple Developer CD Series Tool Chest February 1996 (Apple Computer)(1996).iso / Sample Code / AOCE Sample Code / PowerTalk Access Modules / Sample SMSAM / SampleSMSAM Source / BuildingBlocks / Message.cp < prev    next >
Encoding:
Text File  |  1995-07-28  |  3.4 KB  |  158 lines  |  [TEXT/R*ch]

  1. /*
  2.     File:        Message.cp
  3.  
  4.     Copyright:    © 1991-1994 by Apple Computer, Inc.
  5.                 All rights reserved.
  6.  
  7.     Part of the AOCE Sample SMSAM Package.  Consult the license
  8.     which came with this software for your specific legal rights.
  9.  
  10. */
  11.  
  12.  
  13.  
  14. #ifndef __MESSAGE__
  15. #include "Message.h"
  16. #endif
  17.  
  18. #ifndef __RESOURCES__
  19. #include "Resources.h"
  20. #endif
  21.  
  22.  
  23. /***********************************|****************************************/
  24.  
  25. TMessage::TMessage ( ) :
  26.     fLockCount ( 0 )
  27. {
  28.     fMessage = FAILNewHandle ( 0 );
  29. }
  30.  
  31. /***********************************|****************************************/
  32.  
  33. TMessage::TMessage ( const char * message ) :
  34.     fLockCount ( 0 )
  35. {
  36.     unsigned long l = strlen ( message );
  37.     fMessage = FAILNewHandle ( l );
  38.     
  39.     BlockMove ( (Ptr) message, *fMessage, l );
  40. }
  41.  
  42. /***********************************|****************************************/
  43.  
  44. TMessage::TMessage ( const unsigned char * message ) :
  45.     fLockCount ( 0 )
  46. {
  47.     unsigned long l = message[0];
  48.     
  49.     fMessage = FAILNewHandle ( l );
  50.     
  51.     BlockMove ( (Ptr) & message [ 1] , *fMessage, l );
  52. }
  53.  
  54. /***********************************|****************************************/
  55.  
  56. TMessage::TMessage ( short messageBase, short id ) :
  57.     fLockCount ( 0 )
  58. {
  59.     Handle resH = GetResource ( 'TMSG', messageBase );
  60.     
  61.     if ( resH )
  62.     {    Ptr p = *resH;
  63.         unsigned short count = * ( short *) p;
  64.         p += sizeof ( short );
  65.         
  66.         for ( unsigned long i = 1 ; i <= count ; ++ i )
  67.         {    unsigned short len = * ( short *) ( p + sizeof(short) );
  68.             if ( * ( short *) p == id )
  69.             {
  70.                 fMessage = FAILNewHandle ( len );
  71.                 BlockMove ( (Ptr) ( p + 2 * sizeof( short ) ), *fMessage, len );
  72.                 break;
  73.             }
  74.             else
  75.             {
  76.                 p += sizeof ( short ) + sizeof ( short ) + len;
  77.             }
  78.         }
  79.     }
  80.     else
  81.         fMessage = FAILNewHandle ( 0 );
  82. }
  83.  
  84. /***********************************|****************************************/
  85.  
  86.  
  87. TMessage::~TMessage ( )
  88. {
  89.     DisposeIfHandle ( fMessage );
  90. }
  91.  
  92. /***********************************|****************************************/
  93.  
  94. Handle TMessage::GetTextHandle ( ) const
  95. {
  96.     return fMessage;
  97. }
  98.  
  99. /***********************************|****************************************/
  100.  
  101. unsigned long TMessage::GetTextLength ( ) const
  102. {
  103.     return GetHandleSize ( fMessage );
  104. }
  105.  
  106. /***********************************|****************************************/
  107.  
  108. void TMessage::Lock ( ) const
  109. {
  110.     ((TMessage*) this)->fLockCount ++ ;
  111.     HLock ( fMessage );
  112. }
  113.  
  114. /***********************************|****************************************/
  115.  
  116. void TMessage::Unlock ( ) const
  117. {
  118.     if ( fLockCount > 0 )
  119.     {
  120.         ((TMessage*) this)->fLockCount -- ;
  121.         HUnlock ( fMessage );
  122.     }
  123. }
  124.  
  125. /***********************************|****************************************/
  126.  
  127. Boolean TMessage::SetItemValue ( const char * item, const char * newValue )
  128. {    Boolean result = false;
  129.     long offset = 0;
  130.     
  131.     do {
  132.         offset = Munger ( fMessage, offset, (Ptr) item, strlen ( item ),
  133.                                             (Ptr) newValue, strlen ( newValue ) );
  134.         if ( offset >= 0 )
  135.             result = true;
  136.     } while ( offset >= 0 );
  137.     
  138.     return result;
  139. }
  140.  
  141. /***********************************|****************************************/
  142.  
  143. Boolean TMessage::SetItemValue ( const char * item, const Str255& newValue )
  144. {    Boolean result = false;
  145.     long offset = 0;
  146.     
  147.     do {
  148.         offset = Munger ( fMessage, offset, (Ptr) item, strlen ( item ),
  149.                                             (Ptr) & newValue[1], newValue [ 0 ] );
  150.         if ( offset >= 0 )
  151.             result = true;
  152.     } while ( offset >= 0 );
  153.     
  154.     return result;
  155. }
  156.  
  157. /***********************************|****************************************/
  158.